home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / jpegagasrc / jpegaga / writepixel.asm < prev   
Assembly Source File  |  1995-11-08  |  4KB  |  295 lines

  1. *** New WritePixelLine8 ***
  2.  
  3. * (c) 1995 by Pawel Hernik, Günther Röhrich and various others 
  4.  
  5.     machine mc68020
  6.  
  7.    
  8.     XDEF _newWPL8
  9.     XDEF _sweep2nd
  10.   
  11.         XREF _linebuf
  12.         XREF _PlanePos
  13.  
  14.     cseg
  15.  
  16.  
  17. _newWPL8:
  18.     movem.l    d0-a6,-(sp)
  19.     sub.w    #16,sp
  20.     move.l    a2,a0            ;chunky
  21.     
  22.  
  23.     move.l    _linebuf,a1
  24.     move.l    a1,a2
  25.     move.l    2*4+16(sp),d0
  26.     add.w    #$1f,d0
  27.     and.w    #~$1f,d0
  28.     add.w    d0,a2
  29.     move.l    #$00ff00ff,a3
  30.     move.l    #$0f0f0f0f,a4
  31.     
  32. .sweep1st:
  33.     movem.l (a0),d0-d7
  34.     move.l  d4,a6
  35.     move.w  d0,d4
  36.     swap    d4   
  37.     move.w  d4,d0
  38.     move.w  a6,d4
  39.     move.l  d5,a6
  40.     move.w  d1,d5
  41.     swap    d5   
  42.     move.w  d5,d1
  43.     move.w  a6,d5
  44.     move.l  d6,a6
  45.     move.w  d2,d6
  46.     swap    d6   
  47.     move.w  d6,d2
  48.     move.w  a6,d6
  49.     move.l  d7,a6
  50.     move.w  d3,d7
  51.     swap    d7   
  52.     move.w  d7,d3
  53.     move.w  a6,d7
  54.     move.l  d7,a6
  55.     move.l  d6,a5
  56.     move.l  a3,d6
  57.     move.l  a3,d7
  58.     and.l   d0,d6
  59.     and.l   d2,d7
  60.     eor.l   d6,d0
  61.     eor.l   d7,d2
  62.     lsl.l   #8,d6
  63.     lsr.l   #8,d2
  64.     or.l    d2,d0
  65.     or.l    d7,d6
  66.     move.l  a3,d7
  67.     move.l  a3,d2
  68.     and.l   d1,d7
  69.     and.l   d3,d2
  70.     eor.l   d7,d1
  71.     eor.l   d2,d3
  72.     lsl.l   #8,d7
  73.     lsr.l   #8,d3
  74.     or.l    d3,d1
  75.     or.l    d2,d7
  76.  
  77.     move.l  a4,d2
  78.     move.l  a4,d3
  79.     and.l   d0,d2
  80.     and.l   d1,d3
  81.     eor.l   d2,d0
  82.     eor.l   d3,d1
  83.     lsr.l   #4,d1
  84.     or.l    d1,d0
  85.     move.l  d0,(a1)+
  86.     lsl.l    #4,d2
  87.     or.l    d3,d2
  88.     move.l    d2,(a1)+
  89.  
  90.     move.l  a4,d3
  91.     move.l  a4,d1
  92.     and.l   d6,d3
  93.     and.l   d7,d1
  94.     eor.l   d3,d6
  95.     eor.l   d1,d7
  96.     lsr.l   #4,d7
  97.     or.l    d7,d6
  98.     move.l    d6,(a1)+
  99.     lsl.l    #4,d3
  100.     or.l    d1,d3
  101.     move.l    d3,(a1)+
  102.  
  103.     move.l  a6,d7
  104.     move.l  a5,d6
  105.     move.l  a3,d0
  106.     move.l  a3,d1
  107.     and.l   d4,d0
  108.     and.l   d6,d1
  109.     eor.l   d0,d4
  110.     eor.l   d1,d6
  111.     lsl.l   #8,d0
  112.     lsr.l   #8,d6
  113.     or.l    d6,d4
  114.     or.l    d1,d0
  115.     move.l  a3,d1
  116.     move.l  a3,d6
  117.     and.l   d5,d1
  118.     and.l   d7,d6
  119.     eor.l   d1,d5
  120.     eor.l   d6,d7
  121.     lsl.l   #8,d1
  122.     lsr.l   #8,d7
  123.     or.l    d7,d5
  124.     or.l    d6,d1
  125.     move.l  a4,d6
  126.     move.l  a4,d7
  127.     and.l   d4,d6
  128.     and.l   d5,d7
  129.     eor.l   d6,d4
  130.     eor.l   d7,d5
  131.     lsr.l   #4,d5
  132.     or.l    d5,d4
  133.     move.l  d4,(a1)+
  134.     lsl.l   #4,d6
  135.     or.l    d7,d6
  136.     move.l  d6,(a1)+
  137.  
  138.     move.l  a4,d7
  139.     move.l  a4,d5
  140.     and.l   d0,d7
  141.     and.l   d1,d5
  142.     eor.l   d7,d0
  143.     eor.l    d5,d1
  144.     lsr.l    #4,d1
  145.     or.l    d1,d0
  146.     move.l    d0,(a1)+
  147.     lsl.l    #4,d7
  148.     or.l    d5,d7
  149.     move.l    d7,(a1)+
  150.     add.w    #32,a0
  151.     cmp.l    a2,a1
  152.     bne    .sweep1st
  153.  
  154.     move.l    _linebuf,a0
  155.     move.l  #$33333333,a5
  156.     move.l  #$55555555,a6
  157.  
  158.     move.l    a2,_counter
  159.     lea    _PlanePos,a1
  160.     movea.w #0,a2
  161.  
  162. _sweep2nd:
  163.     move.l    (a0),d0
  164.     move.l    8(a0),d1
  165.     move.l    16(a0),d2
  166.     move.l    24(a0),d3
  167.  
  168.     move.l    a5,d6
  169.     move.l    a5,d7
  170.     and.l    d0,d6
  171.     and.l    d2,d7
  172.     eor.l    d6,d0
  173.     eor.l    d7,d2
  174.     lsl.l    #2,d6
  175.     lsr.l    #2,d2
  176.     or.l    d2,d0
  177.     or.l    d7,d6
  178.     move.l    a5,d7
  179.     move.l    a5,d2
  180.     and.l    d1,d7
  181.     and.l    d3,d2
  182.     eor.l    d7,d1
  183.     eor.l    d2,d3
  184.     lsl.l    #2,d7
  185.     lsr.l    #2,d3
  186.     or.l    d3,d1
  187.     or.l    d2,d7
  188.     move.l    a6,d2
  189.     move.l    a6,d3
  190.     and.l    d0,d2
  191.     and.l    d1,d3
  192.     eor.l    d2,d0
  193.     eor.l    d3,d1
  194.     lsr.l    #1,d1
  195.     or.l    d1,d0
  196.     move.l    d0,([7*4,a1],a2.l)
  197.     add.l    d2,d2
  198.     or.l    d3,d2
  199.     move.l    d2,([6*4,a1],a2.l)
  200.  
  201.     move.l    a6,d3
  202.     move.l    a6,d1
  203.     and.l    d6,d3
  204.     and.l    d7,d1
  205.     eor.l    d3,d6
  206.     eor.l    d1,d7
  207.     lsr.l    #1,d7
  208.     or.l    d7,d6
  209.     move.l    d6,([5*4,a1],a2.l)
  210.     add.l    d3,d3
  211.     or.l    d1,d3
  212.     move.l    d3,([4*4,a1],a2.l)
  213.  
  214.     move.l    4(a0),d0
  215.     move.l    12(a0),d1
  216.     move.l    20(a0),d2
  217.     move.l    28(a0),d3
  218.  
  219.     move.l    a5,d6
  220.     move.l    a5,d7
  221.     and.l    d0,d6
  222.     and.l    d2,d7
  223.     eor.l    d6,d0
  224.     eor.l    d7,d2
  225.     lsl.l    #2,d6
  226.     lsr.l    #2,d2
  227.     or.l    d2,d0
  228.     or.l    d7,d6
  229.     move.l    a5,d7
  230.     move.l    a5,d2
  231.     and.l    d1,d7
  232.     and.l    d3,d2
  233.     eor.l    d7,d1
  234.     eor.l    d2,d3
  235.     lsl.l    #2,d7
  236.     lsr.l    #2,d3
  237.     or.l    d3,d1
  238.     or.l    d2,d7
  239.     move.l    a6,d2
  240.     move.l    a6,d3
  241.     and.l    d0,d2
  242.     and.l    d1,d3
  243.     eor.l    d2,d0
  244.     eor.l    d3,d1
  245.     lsr.l    #1,d1
  246.     or.l    d1,d0
  247.     move.l    d0,([3*4,a1],a2.l)
  248.     add.l    d2,d2
  249.     or.l    d3,d2
  250.     move.l    d2,([2*4,a1],a2.l)
  251.     
  252.     move.l    a6,d3
  253.     move.l    a6,d1
  254.     and.l    d6,d3
  255.     and.l    d7,d1
  256.     eor.l    d3,d6
  257.     eor.l    d1,d7
  258.     lsr.l    #1,d7
  259.     or.l    d7,d6
  260.     move.l    d6,([1*4,a1],a2.l)
  261.     add.l    d3,d3
  262.     or.l    d1,d3
  263.     move.l    d3,([0*4,a1],a2.l)
  264.     lea    4(a2),a2
  265.  
  266.     add.w    #32,a0
  267.     cmp.l    _counter(pc),a0
  268.     bne    _sweep2nd
  269.  
  270.  
  271.     add.w    #16,sp
  272.     movem.l    (sp)+,d0-a6
  273.     move.l    d2,d0
  274.     rts
  275.  
  276.  
  277.  
  278.  
  279. wd        =0
  280. wd16        =2
  281. htm1        =4
  282. row        =6
  283. chunkytmp    =8
  284. ret        =12
  285. ;^ 16 bytes on stack
  286.  
  287. ;wd:        dc.w    0
  288. ;wd16:        dc.w    0
  289. ;htm1:        dc.w    0
  290. ;row:        dc.w    0
  291. ;chunkytmp:    dc.l    0    ;tmp address
  292. ;ret:        dc.l    0
  293.  
  294. _counter    dc.l    0
  295.